﻿#define _CRT_SECURE_NO_WARNINGS 1

//1.数组插入元素并排序

//void func(int* arr, int x, int sz)
//{
//	int left = 0;
//	int right = sz - 1;
//	int mid = (left + right) / 2;
//
//	while (left < right - 1)
//	{
//		mid = (left + right) / 2;
//
//		if (x > arr[mid])
//		{
//			left = mid;
//		}
//		else
//		{
//			right = mid;
//		}
//	}
//
//	int end = sz - 1;
//
//	while (left < end)
//	{
//		arr[end + 1] = arr[end];
//		end--;
//	}
//
//	arr[left + 1] = x;
//}
//
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	int x;
//	printf("输入：\n");
//	scanf("%d", &x);
//	int arr[1000];
//	int sz = 0; // 数组有效数据个数
//	int n;
//
//	while (scanf("%d",&n))
//	{
//		arr[sz++] = n;
//		if (getchar() == '\n')
//		{
//			break;
//		}
//	}
//	
//	func(arr, x, sz);
//
//	printf("输出：\n");
//
//	for (int i = 0; i < sz+1; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}

// 2.计算及格率和优秀率

//#include<stdio.h>
//int main()
//{
//	printf("请输入学生人数：\n");
//	int n; // 学生人数
//	scanf("%d", &n);
//
//	printf("请输入学生们的成绩：\n");
//	int score; // 成绩
//	int PassNum = 0; // 及格人数
//	int FineNum = 0; // 优秀人数
//	for (int i = 0; i < n; i++)
//	{
//		scanf("%d", &score);
//
//		if (score >= 60)
//		{
//			PassNum++;
//		}
//
//		if (score >= 85)
//		{
//			FineNum++;
//		}
//	}
//
//	//计算及格率和优秀率
//	float pass = 1.0*PassNum/n;
//	float fine = 1.0*FineNum/n;
//	printf("及格率：%.f%%\n", pass * 100);
//	printf("优秀率：%.f%%\n", fine * 100);
//
//	return 0;
//}

//3.区间K大数查询

//#include<stdio.h>
//int main()
//{
//	int n;
//	printf("序列长度：\n");
//	scanf("%d", &n);
//	
//	int tmp;
//	int arr1[1000];
//	printf("给定序列：\n");
//	for (int i = 1; i < n + 1; i++)
//	{
//		scanf("%d", &tmp);
//		arr1[i] = tmp;
//	}
//
//	int m;
//	printf("询问个数：\n");
//	scanf("%d", &m);
//
//	int i, r, k;
//	int arr2[1000]; // 存放区间序列
//	int arr3[1000]; // 存放找到的数
//	for (int j = 0; j < m; j++)
//	{
//		scanf("%d %d %d", &i, &r, &k);
//
//		int sz = r - i + 1; // 区间长度
//
//		//复制 arr1 -> arr2
//		for (int a = 1; a < sz + 1; a++)
//		{
//			arr2[a] = arr1[i++];
//		}
//
//		//查找
//		for (int b = 0; b < k; b++)
//		{
//			for (int c = 1; c < sz; c++)
//			{
//				if (arr2[c] < arr2[c + 1])
//				{
//					continue;
//				}
//				else
//				{
//					int tmp = arr2[c];
//					arr2[c] = arr2[c + 1];
//					arr2[c + 1] = tmp;
//				}
//			}
//		}
//		//找到了
//		arr3[j] = arr2[sz - k + 1];
//	}
//
//	printf("输出：\n");
//	for (int j = 0; j < m; j++)
//	{
//		printf("%d\n", arr3[j]);
//	}
//
//
//	return 0;
//}

//4.日期读取混乱问题

//typedef struct YearMonthDay
//{
//	int year;
//	int month;
//	int day;
//}Date;
//
////判断是否为闰年
//int is_leap(int year)
//{
//	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
//	{
//		return 1;
//	}
//	else
//	{
//		return 0;
//	}
//}
//
////根据年份计算对应月份的天数
//int DayOfMonth(int flag, int month)
//{
//	int arr[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
//	if (flag && month == 2)
//	{
//		return 29;
//	}
//	else
//	{
//		return arr[month];
//	}
//}
//
//void func(Date* s,int year, int month, int day)
//{
//	
//	if (year >= 0 && year <= 99)
//	{
//		//计算对应的年份
//		if (year >= 60 && year <= 99)
//		{
//			year += 1900;
//		}
//		else
//		{
//			year += 2000;
//		}
//		//判断是否为闰年
//		int flag = is_leap(year);
//
//		if (month > 0 && month <= 12)
//		{
//			int day_of_month = DayOfMonth(flag,month);
//			if (day > 0 && day <= day_of_month)
//			{
//				s->day = day;
//				s->month = month;
//				s->year = year;
//			}
//		}
//	}
//}
//
//void Swap(Date* s1, Date* s2)
//{
//	Date tmp;
//	tmp.year = s1->year;
//	tmp.month = s1->month;
//	tmp.day = s1->day;
//	s1->year = s2->year;
//	s1->month = s2->month;
//	s1->day = s2->day;
//	s2->year = tmp.year;
//	s2->month = tmp.month;
//	s2->day = tmp.day;
//}
//
////冒泡排序(小->大)
//void DateSort(Date* arr)
//{
//	for (int i = 0; i < 5; i++)
//	{
//		for (int j = 0; j < 5 - i; j++)
//		{
//			if (arr[j].year > arr[j + 1].year)
//			{
//				Swap(&arr[j], &arr[j + 1]);
//			}
//			else if(arr[j].year == arr[j+1].year)
//			{
//				if (arr[j].month > arr[j].month)
//				{
//					Swap(&arr[j], &arr[j + 1]);
//				}
//				else if (arr[j].month == arr[j].month)
//				{
//					if (arr[j].day > arr[j].day)
//					{
//						Swap(&arr[j], &arr[j + 1]);
//					}
//					else
//					{
//						continue;
//					}
//				}
//				else
//				{
//					continue;
//				}
//			}
//			else
//			{
//				continue;
//			}
//		}
//	}
//}
//
//#include<stdio.h>
//int main()
//{
//	char a, b;
//	int year, month, day;
//	printf("输入：\n");
//	scanf("%d%c%d%c%d", &year, &a, &month, &b, &day);
//
//	printf("输出：\n");
//	Date s1 = { 0 };
//	func(&s1,year, month, day);
//	Date s2 = { 0 };
//	func(&s2,year, day, month);
//	Date s3 = { 0 };
//	func(&s3,month, year, day);
//	Date s4 = { 0 };
//	func(&s4,day, year, month);
//	Date s5 = { 0 };
//	func(&s5,month, day, year);
//	Date s6 = { 0 };
//	func(&s6, day, month, year);
//
//	//冒泡排序
//	Date arr[6] = { s1,s2,s3,s4,s5,s6 };
//	DateSort(arr);
//
//	//打印
//	for (int i = 0; i < 6; i++)
//	{
//		if (arr[i].day != 0)
//		{
//			printf("%d-%d-%d\n", arr[i].year, arr[i].month, arr[i].day);
//		}
//	}
//
//	return 0;
//}

//5.分巧克力

int func(int X, int K, int* Hi, int* Wi)
{
	int i = 1; // 假设切出来的巧克力边长为i

	while (1)
	{
		int count = 0; // 分出的巧克力数量
		for (int j = 0; j < X; j++)
		{
			count += (Hi[j] / i) * (Wi[j] / i);
		}

		if (count < K)
		{
			return i - 1;
		}

		i++;
	}
}

#include<stdio.h>
int main()
{
	int X, K;
	int Hi[1000], Wi[1000];
	printf("输入：\n");
	scanf("%d%d", &X, &K);
	for (int i = 0; i < X; i++)
	{
		scanf("%d", &Hi[i]);
		scanf("%d", &Wi[i]);
	}

	printf("输出：\n");
	int ret = func(X,K,Hi,Wi);
	printf("%d\n", ret);

	return 0;
}